<?php

namespace Common;

use Iterator;

/**
 * 迭代器类
 *  
 *  实现SPL标准库中的 Iterator 类
 *
 * @author	夏立军
 * @email	m17269@163.com
 * @time	2020年11月14日 11:43:08
 */
class AllUser implements Iterator
{
    // 所有的User id
    protected $ids = array();
    // 迭代器的当前位置
    protected $index;
    // 从数据库中取到的对象
    protected $data = array();

    public function __construct()
    {
        $db = Factory::getDatabase();
        $res = $db->query("SELECT id FROM `user`");
        $data = $res->fetchAll(\PDO::FETCH_ASSOC);
        foreach ($data as $row) {
            $this->ids[] = $row['id'];
        }
    }

    // 获取当前的元素
    public function current()
    {
        $id = $this->ids[$this->index];
        return Factory::getUser($id);
    }

    // 下一个元素
    public function next()
    {
        $this->index++;
    }

    // 当前在迭代器中的位置
    public function key()
    {
        return $this->index;
    }

    // 验证当前是否还有下一个元素
    public function valid()
    {
        return $this->index < count($this->ids);
    }

    // 重置整个迭代器
    public function rewind()
    {
        $this->index = 0;
    }
}
